﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;

namespace ZoambieGaem {
    class Master {

        //Konstruktori
        public Master(int x, int y, GraphicsDeviceManager graphics) {
            this.graphics = graphics;
            this.screenHeight = y;
            this.screenWidth = x;
            this.map = Maps.map;
            this.blockSize = 50;
            this.gameJustStarted = true;
            this.drawScale = .5f;
            this.mouseFollower = new Vector2(1, 1);
            this.zoambieList = new LinkedList<Zoambie>();
            this.deadzoambieList = new LinkedList<Zoambie>();
            this.projectileList = new LinkedList<Projectile>();
            this.bloodList = new LinkedList<Blood>();
            this.drawShadows = true;
            this.drawAStar = false;
            this.gameStarted = false;
            this.drawGameArea = true;
            this.shadowLength = (int)Math.Sqrt(
                                        (screenHeight * screenHeight) +
                                        (screenWidth * screenWidth)) + screenWidth / 2;

        }

        //Nullpointterit kaikille luokille varmuudeksi kun unloadataan
        public void unload() {
            this.player = null;
            this.zoambieList = null;
            this.mapPoints = null;
            this.convexHulls = null;
            this.wall = null;
            this.zoambie = null;
            this.map = null;
            this.frameDrawn = false;
        }



        public Boolean frameDrawn;    //päivitetään liikkuvia osia vain kun frame piiretty
        public Player player;                    //Pelaaaja
        public LinkedList<Zoambie> deadzoambieList;  //Kaikki zombit listattuna
        public LinkedList<Zoambie> zoambieList;    //Kaikki zombit listattuna
        public LinkedList<Projectile> projectileList;
        public Vector2 mouse;                      //Missä kohtaa hiiri on
        public int screenWidth;
        public int screenHeight;                   //Ruudun korkeus
        public SpriteFont font;                   //Debuggaus fontti
        public int[][] map;                   //Koko kartta
        private Texture2D _wall;
        public Texture2D wall;                     //Tekstuuri seinälle
        public Texture2D zoambie;                  //Tekstuuri zombille
        public Texture2D ground;                  //Tekstuuri maalle
        public Texture2D path;                   //reitti sprite
        public Texture2D range;                     //?
        public Flashlight flashlight;                     //fikkari sprite
        public int lastTick;                        //FPS LASKENTAA
        public int lastFrameRate;                  //FPS laskentaan
        public int frameRate;                       //FPS laskentaan
        public int FPS;                            //Itse FPS
        public Point[] mapPoints;                   //Pisteet mistä convex hullit luodaan
        public LinkedList<Point[]> convexHulls;     //Lista seinien rajoista convexHullina
        public LinkedList<Vector2[]> shadows;       //Lista varjoista
        public GraphicsDeviceManager graphics;      //Kannetaan varmuudeksi mukana jos tarvii
        public int blockSize;                       //Kuinka suuria yksi kartan alkio on px
        public int shadowLength ;                      //Kuinka suuria yksi kartan alkio on px
        public Boolean gameJustStarted;             //Onko peli juuri alkanut ()
        public float drawScale;                     //Määrittää miten suuriksi pelaajat ja zombit piirretään
        public Vector2 mouseFollower;               //Ruudun keskikohta, liikkuu pelaajan ja hiiren väliin
        public Boolean drawShadows;
        public SpriteBatch spriteBatch;             //Sproitbooootch
        public Boolean drawAStar;
        public Boolean gameStarted ;
        public Boolean drawGameArea ;
        public int[][] routeMap;
        public Weapon wpn;                       //Nykyinen ase
        public LinkedList<Blood> bloodList;                            //Veri lista
        public Texture2D playerBloodTexture;                      //Veri textuuri
        public Texture2D zombieBloodTexture;                      //Veri textuuri
        public Texture2D sawTexture;            //tekstuuri sahalle

    }
}
